iT邦幫忙

2024 iThome 鐵人賽

DAY 11
2
Kubernetes

Kubernetes圖解筆記系列 第 11

Day-11 kubectl:基本介紹

  • 分享至 

  • xImage
  •  

只要看語法的話可以直接拉到文末 (●°u°●)


前一篇在部署 pod 的時候,有使用到 kubectl 指令,它是操作 Kubernetes 時必不可少的 CLI 工具,用來管理和操作 Kubernetes Cluster 中的應用程式、資源和服務。
(基本上就是操作所有東西)

kubectl 的主要功能包含:

  • 建立資源:部署應用程序和服務
  • 檢視資源:取得 Cluster 中的資源資訊
  • 更新資源:修改現有資源的配置
  • 刪除資源:移除不再需要的資源
  • 偵錯:檢查 Log 和執行故障排除

基本的命令結構是:

kubectl [command] [TYPE] [NAME] [flags]
  • command: 要執行的操作,如:create、get、delete
  • TYPE: 資源類型,如:pods、services、deployments
  • NAME: 資源名稱
  • flags: 其他參數

指令又分為 命令式(Imperative) 和 宣告式 (Declarative)

命令式 (Imperative):How To Do

直接告訴 Kubernetes 執行特定操作

  • 直接、即時的操作
  • 需要明確定義每個步驟
  • 不適合太細節的設定 (指令會變得長且複雜)
  • 有順序性:中斷時需進行步驟判斷,再採取對應處理方式

create、expose 都是命令式語句

kubectl create pod <pod-name> --image=<image>
  • 優點
    • 簡單直接,容易理解
    • 適合快速操作和臨時更改
    • 對於簡單任務效率高
  • 缺點
    • 難以追蹤變更紀錄
    • 不利於版本控制
    • 複雜操作容易出錯
    • 不利於資訊傳遞 (沒人知道當初怎麼建的)

適用情境:適合快速測試和除錯

宣告式 (Declarative):What To Do

只定義執行結果,由 Kubernetes 自行決定如何達到該狀態

  • 使用 YAML 或 JSON 文件描述期望狀態
  • kubernetes 負責實現和維護狀態

apply 就屬宣告語句

kubeclt apply -f <yamlfile>

適用情境:複雜配置、需保留異動紀錄和長期維護


運作方式

先前有提過 Kubernets 使用 kube-apiserver 作為唯一的溝通媒介,kubectl 也不例外,當使用 kubectl 指令時,背後的運作是這樣的:

以 kubectl get pods 指令為說明範例
https://ithelp.ithome.com.tw/upload/images/20240912/20168437anv7fnfaNN.png

  1. 使用者下了 kubectl get pods 命令
  2. kubectl 接收後解析指令,並構建 HTTP GET 請求 /api/v1/namespaces/default/pods
  3. 發送請求到kube-apiserver
  4. kube-apiserver驗證請求
    • 先驗證請求端的身份
    • 再驗證該身份是否有執行權限
  5. 驗證通過後,kube-apiserver 會直接從 ETCD 中讀取 pod 資訊
  6. 回傳 pod 列表給 kubectl
  7. kubectl格式化後顯示給使用者

為什麼不直接向 Worker Node 請求 pod 資訊?

  • 一致性:所有的執行資訊都保存在 ETCD,可以保證資訊的一致性和可靠性
  • 效率:直接從 ETCD 讀取比查詢多個節點快多了
  • 安全性:減少了對 Worker Nodes 的直接訪問,提高安全性

最後補充幾個常用命令

  • 查詢現有資源
kubectl get <資源>
# 實例
kubectl get pods
kubectl get services
kubectl get deployments
  • 使用 yaml 配置檔建立資源
kubectl create -f <yaml-file>
# 範例
kubectl create -f demo-pod.yaml
  • 添加配置
kubectl apply -f <yaml-file>
# 範例
kubectl apply -f my-config.yaml
  • 刪除資源
kubectl delete <資源類別> <資源名稱>
# 範例
kubectl delete demo-pod
  • 查看 Log
kubectl logs <資源名稱>
# 範例
kubectl logs demo-pod
  • 查詢資源詳情
kubectl describe <資源類別> <資源名稱>
# 範例
kubectl describe pod demo-pod

小結

雖說 kubectl 背後的運行模式不是使用這個工具的必要知識,不過在實務應用上,多知道一些運作原理常常可以在除錯的時候少繞一些彎路。

如果覺得 kubec-t-l 很難唸的話,可以唸成 kube-control


上一篇
Day-10 Depoly Pod
下一篇
Day-12 kubectl:常見應用
系列文
Kubernetes圖解筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
雷N
iT邦研究生 1 級 ‧ 2024-09-12 01:16:44

Developer 那圖像的角度真好不是直面螢幕,而是有點右傾看向右邊的 kubectl

我要留言

立即登入留言